package com.wyg.demo.common.utils;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author WenYanguang
 * @since 2024/2/28
 */
public class GenerateQrUtil {

    /**
     * 生成二维码的方法
     * @param content 二维码内容
     * @param path 二维码图片保存路径
     */
    public static void code(String content,String path){
        //设置二维码宽
        int width = 400;
        //设置二维码高
        int height = 400;
        //设置二维码的后缀名称
        String format = "png";
        //设置map集合要往二维码内添加的参数
        @SuppressWarnings("rawtypes")
        Map map = new HashMap();
        //设置二维码的级别
        map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        //设置二维码中文本的编码格式
        map.put(EncodeHintType.CHARACTER_SET, "utf-8");
        //设置二维码的外边框
        map.put(EncodeHintType.MARGIN, 1);
        try {
            //创建生成二维码对象，调用方法将所需要的参数放入
            BitMatrix bm = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height,map);
            //创建path对象将物理地址放到file文件内，然后生成path对象
            Path paths = new File(path).toPath();
            //使用writeToPath方法调用下载，里面的参数是下载的对象照片，下载的后缀名称，下载的物理路径地址
            MatrixToImageWriter.writeToPath(bm, format, paths);
        } catch (WriterException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        code("这是一段测试内容" +
                        "\n"
                        +
                        "时间："+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())
                ,"C:\\Users\\72435\\Downloads\\test2.png");
    }
}
